
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
        </head>
        <body>
            <section>
                <!-- &quot;      ____                       ______       &quot; -->
<!-- &quot;     &#x2F; __ ____ _____ ____      &#x2F;_  __&#x2F;____   &quot; -->
<!-- &quot;    &#x2F; &#x2F;_&#x2F; &#x2F; __ `&#x2F; __ `&#x2F; _ ______&#x2F; &#x2F; &#x2F; ___&#x2F;   &quot; -->
<!-- &quot;   &#x2F; ____&#x2F; &#x2F;_&#x2F; &#x2F; &#x2F;_&#x2F; &#x2F;  __&#x2F;_____&#x2F; &#x2F; &#x2F; &#x2F;       &quot; -->
<!-- &quot;  &#x2F;_&#x2F;    __,_&#x2F;__, &#x2F;___&#x2F;     &#x2F;_&#x2F; &#x2F;_&#x2F;        &quot; -->
<!-- &quot;              &#x2F;____&#x2F;                          &quot; -->
<!-- &quot;                                              &quot; -->
<br/><br/>
  <p>
    <span>zenity</span>
    <span>文档标题</span>
    <span>zenity</span>
  </p>
<b>NAME</b>
    <section style="margin-left:8%;">
    <strong>zenity</strong>
    - This is generated by page-tr
<br/><br/>
    Zenity是一个开源和跨平台的应用程序，它在命令行中显示GTK +对话框并使用shell脚本。
<br/><br/>
    GNU Linux的操作系统建立在非常强大的内核称为Linux。 Linux以其命令行操作而闻名。 随着Linux在日常和桌面计算中的发明，linux保持不再偏向命令行，它同样是图形化和开发图形应用程序保持不再是一个困难的任务。如下图所示about对话框的实现：
<br/><br/>
    <strong>Zenity是什么？</strong>
        <section style="margin-left:4%">
    * zenity是一个开源和显示GTK +对话框的命令行和使用shell脚本一个跨平台的应用程序。 它允许在图形框中向&#x2F;从shell请求和呈现信息。 该应用程序允许您在命令行中创建图形对话框，并使用户和shell之间的交互非常容易。
        </section>
<br/><br/>
    <strong>Zenity的特性</strong>
        <section style="margin-left:4%">
    * 轻松创建GUI
<br/><br/>
    * 使用shell脚本可以与GUI用户进行交互
        </section>
<br/><br/>
    <strong>在Linux中安装Zenity</strong>
        <section style="margin-left:4%">
    Zentity默认安装或者在今天大多数的标准Linux发行库可用。 您可以通过执行以下命令检查是否安装到您的机器上。
<pre style="color:indianred">
    zenity --version
</pre>
    如果它没有安装，可以使用如下命令进行安装。
<pre style="color:indianred">
    sudo apt-get install zenity
</pre>
        </section>
<br/><br/>
    </section>
<b>SYNOPSIS</b>
    <section style="margin-left:8%;">
    zenity
<br/><br/>
    </section>
<b>Zenity 概述</b>
    <section style="margin-left:8%;">
    通过about对话框可以看出Zenity的使用非常容易，接下来我们对它的各种可能状态进行详细地介绍。下表列出了可以创建的对话框的主要类型。
<br/><br/>
    <strong>列表对话框</strong>
        <section style="margin-left:4%">
    --list 
        <section style="margin-left:4%">
    使用 --list 选项创建一个列表对话框，Zenity 在标准输出返回选中行的第一列项目。
        </section>
    --list --checklist
        <section style="margin-left:4%">
    如果使用 --list --checklist选项，每一行必须以“TRUE”或“FALSE”开始，多选列表
        </section>
    --list --radiolist
        <section style="margin-left:4%">
    如果使用 --list --radiolist选项，每一行必须以“TRUE”或“FALSE”开始，单选列表
        </section>
        </section>
<br/><br/>
    <strong>文件选择框</strong>
        <section style="margin-left:4%">
    \fI--file-selection\fR
        <section style="margin-left:4%">
    创建一个文件选择对话框，Zenity 在标准输出返回选中的文件或目录
        </section>
        </section>
<br/><br/>
    <strong>消息对话框</strong>
        <section style="margin-left:4%">
    \fI--info\fR
        <section style="margin-left:4%">
    信息对话框，同时显示一个OK按钮
        </section>
    <i>--warning</i>
        <section style="margin-left:4%">
    警告对话框，同时显示一个OK按钮
        </section>
    <i>--error</i>
        <section style="margin-left:4%">
    错误对话框，同时显示一个OK按钮
        </section>
    <i>--question</i>
        <section style="margin-left:4%">
    问题对话框，同时显示一个YES&#x2F;NO按钮
        </section>
        </section>
<br/><br/>
    <strong>范围对话框</strong>
        <section style="margin-left:4%">
    <i>--sclae</i>
        <section style="margin-left:4%">
    创建一个带滚动条的范围对话框
        </section>
        </section>
<br/><br/>
    <strong>进度条对话框</strong>
        <section style="margin-left:4%">
    <i>--progress</i>
        <section style="margin-left:4%">
    创建一个进度条对话框
        </section>
        </section>
<br/><br/>
    <strong>文本输入对话框</strong>
        <section style="margin-left:4%">
    <i>--entry</i>
        <section style="margin-left:4%">
    创建一个文本输入对话框，将文本框的内容返回到标准输出
        </section>
        </section>
<br/><br/>
    <strong>文本信息框</strong>
        <section style="margin-left:4%">
    \fI--text-info\fR
        <section style="margin-left:4%">
    创建一个文本信息框，类似于条款readme
        </section>
        </section>
<br/><br/>
<br/><br/>
    </section>
<b>Zenity HowTo</b>
    <section style="margin-left:8%;">
    <strong>Zenity基本用法</strong>
        <section style="margin-left:4%">
    当您写了 <i>Zenity</i> 命令，确保每个文本参数用双引号 <b>&quot;&quot;</b> 括起来。
<pre style="color:indianred">
    例如，使用：zenity --calendar --title=&quot;假日计划&quot;
</pre>
    如果您没有使用引号，可能会产生不可预料的结果。
    注意：宽度、高度、超时要用单引号&#x27; &#x27;括起来。
<br/><br/>
    返回值
<pre style="color:indianred">
    控件返回值＝$(zenity --控件)
</pre>
    echo $? 
        <section style="margin-left:4%">
    返回的是控件成功与否
        </section>
        </section>
<br/><br/>
<br/><br/>
    <strong>Zenity退出代码：</strong>
        <section style="margin-left:4%">
    <i>0</i>
        <section style="margin-left:4%">
    按下确定或关闭
        </section>
    <i>1</i>
        <section style="margin-left:4%">
    按下取消或者窗口的关闭按钮
        </section>
    <i>-1</i>
        <section style="margin-left:4%">
    发生了意外的错误
        </section>
    <i>5</i>
        <section style="margin-left:4%">
    对话框因超时关闭
        </section>
        </section>
<br/><br/>
    <strong>Zenity常规选项：</strong>
        <section style="margin-left:4%">
    <i>--title=标题</i>
        <section style="margin-left:4%">
    指定对话框的标题
        </section>
    <i>--window-icon=图标路径</i>
        <section style="margin-left:4%">
    指定显示在对话窗口框上的图标
        </section>
    <i>--width=宽度</i>
        <section style="margin-left:4%">
    指定对话框的宽度
        </section>
    <i>--height=高度</i>
        <section style="margin-left:4%">
    指定对话框的高度
        </section>
    <i>--timeout=超时</i>
        <section style="margin-left:4%">
    指定超出时间(秒)后对话框自动关闭
        </section>
        </section>
<br/><br/>
<br/><br/>
<br/><br/>
    </section>
<b>Exampes</b>
    <section style="margin-left:8%;">
    <b>Zenity基本对话框</b>
        <section style="margin-left:8%;">
        一些的zenity的基本对话框，它可以直接在命令行调用的。 
<br/><br/>
        <strong>1.快速日历对话框怎么样？</strong>
<pre style="color:indianred">
    zenity --calendar
</pre>
        <strong>2.列表对话框</strong>
            <section style="margin-left:4%">
        使用 --list 选项创建一个列表对话框，Zenity 在标准输出返回选中行的第一列项目。对话框里的数据必须指定行和列，可以由标准输入提供，每一项都必须由换行符分隔。如果在--list下使用--checklist 或 --radiolist 选项，每一行必须以“TRUE”或“FALSE”开始,表示选中状态，返回选中行的第二列项目。
<br/><br/>
        列表框支持以下选项：
<br/><br/>
        --column=“列标题”：
            <section style="margin-left:4%">
        指定列表对话框显示的列标题。您必须为每个要显示的列，用 --column 选项指定一个列标题。
            </section>
        --checklist：
            <section style="margin-left:4%">
        指定列表框的第一列包含一个复选框。
            </section>
        --radiolist：
            <section style="margin-left:4%">
        指定列表框的第一列包含单选按钮。
            </section>
        --editable：
            <section style="margin-left:4%">
        指定显示的项可以编辑。
            </section>
        --separator=“分隔符”：
            <section style="margin-left:4%">
        指定列表框返回选中项时使用的字符。
            </section>
        --print-column=列：
            <section style="margin-left:4%">
        指定选择列上显示什么，默认是“1”，“ALL”用于在列表上显示所有列（要用双引号“”)。
            </section>
<br/><br/>
        下面的例子显示脚本如何创建一个列表对话框：
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    zenity --list 
        --title=&quot;Choose the Bugs You Wish to View&quot; 
        --column=&quot;Bug Number&quot; --column=&quot;Serverity&quot; --column=&quot;Description&quot; 
        992383 Normal &quot;多选时 GtkTreeView 崩溃&quot; 
        293823 High &quot;GNOME 字典不能使用代理&quot; 
        393823 Critical &quot;菜单编辑器在 GNOME 2.0 中不能运行&quot;
</pre>
            </section>
<br/><br/>
        <strong>3.文件选择对话框</strong>
            <section style="margin-left:4%">
        使用 --file-selection 选项创建一个文件选择对话框。Zenity 在标准输出返回选中的文件或目录。默认的文件选择对话框模式是打开对话框。
<br/><br/>
        文件选择对话框支持以下选项：
<br/><br/>
        --filename=文件名：
            <section style="margin-left:4%">
        指定文件选择对话框在第一次显示时，选定的文件或文件夹。
            </section>
        --multiple：
            <section style="margin-left:4%">
        允许在文件选择对话框里选中多个文件名。
            </section>
        --directory：
            <section style="margin-left:4%">
        在文件选择对话框里只允许选中文件夹。
            </section>
        --save：
            <section style="margin-left:4%">
        设置文件选择对话框模式为保存对话框。
            </section>
        --separator=分隔符：
            <section style="margin-left:4%">
        指定用于分隔返回的文件名列表的字符。
            </section>
<br/><br/>
        下面的脚本示范了如何创建一个文件选择对话框：
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    FILE=`zenity --file-selection --title=&quot;Select a File&quot;`
    case $? in
            0)  echo &quot;&quot;$FILE&quot; 被选中。&quot;;;
            1)  echo &quot;没有选择文件。&quot;;;
            -1)  echo &quot;发生意外错误。&quot;;;
    esac
</pre>
            </section>
<br/><br/>
        <strong>4.消息对话框</strong>
            <section style="margin-left:4%">
        对于每一种类型，使用 --text 选项来指定在对话框里显示的文本。
<br/><br/>
        4.1.信息对话框
            <section style="margin-left:4%">
        使用 --info 选项。
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;bash
    zenity --info --text=&quot;合并完成。更新了 3 &#x2F; 10 个文件。&quot;
</pre>
            </section>
        4.2.警告对话框
            <section style="margin-left:4%">
        使用--warning选项
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;bash
    zenity --warning --text=&quot;拔下电源线，避免触电。&quot;
</pre>
            </section>
        4.3.错误对话框
            <section style="margin-left:4%">
        使用--error选项
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;bash
zenity --error --text=&quot;找不到 &#x2F;var&#x2F;log&#x2F;syslog。&quot;
</pre>
            </section>
        4.4.问题对话框
            <section style="margin-left:4%">
        使用--question选项
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;bash
    zenity --question --text=&quot;您确认要继续吗？&quot;
</pre>
            </section>
            </section>
<br/><br/>
        <strong>5.范围对话框 (zenity --scale)</strong>
            <section style="margin-left:4%">
        使用 --scale 选项创建一个范围对话框。
<br/><br/>
        范围对话框支持以下选项：
<br/><br/>
        --text=文本：
            <section style="margin-left:4%">
        设置对话框文本。(默认：调整范围值)
            </section>
        --value=值：
            <section style="margin-left:4%">
        设置初始值。(默认：0)您必须在最小值和最大值之间指定一个值。
            </section>
        --min-value=值：
            <section style="margin-left:4%">
        设置最小值。(默认：0)
            </section>
        --max-value=值：
            <section style="margin-left:4%">
        设置最大值。(默认：100)
            </section>
        --step=值：
            <section style="margin-left:4%">
        设置步长。(默认：1)
            </section>
        --print-partial：
            <section style="margin-left:4%">
        将值打印为标准输出，无论值何时变化。
            </section>
        --hide-value：
            <section style="margin-left:4%">
        隐藏对话框中的值。
            </section>
        下面的脚本示范了如何创建一个范围对话框：
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    VALUE=`zenity --scale --text=&quot;选择窗口透明度。&quot; --value=50`
    case $? in
            0) echo &quot;您选中了 $VALUE%。&quot;;;
            1) echo &quot;未选中值。&quot;;;
            -1) echo &quot;发生意外错误。&quot;;;
    esac
</pre>
            </section>
<br/><br/>
        <strong>6.进度对话框 (zenity --progress)</strong>
            <section style="margin-left:4%">
        使用 --progress 选项创建一个进度对话框。Zenity 从标准输入一行行读取数据。如果某一行以 # 开头，进度框里的文本会被那一行上的文本替换，如果某一行只是一个数字，数字会被换成进度条的百分比。
<br/><br/>
        进度框支持以下选项：
<br/><br/>
        --text=文本：
            <section style="margin-left:4%">
        指定显示在进度框里的文本。
            </section>
        --percentage=百分比：
            <section style="margin-left:4%">
        指定进度框开始时的百分比设定。
            </section>
        --auto-close：
            <section style="margin-left:4%">
        当达到 100% 时自动关闭对话框。
            </section>
        --pulsate：
            <section style="margin-left:4%">
        指定进度条跳动，直到从标准输入读到一个 EOF 文件结束符。
            </section>
        下面的脚本示范了如何创建一个进度对话框：
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    (
    echo &quot;10&quot; ; sleep 1
    echo &quot;# 更新邮件日志&quot; ; sleep 1
    echo &quot;20&quot; ; sleep 1
    echo &quot;# 复位定时计划任务&quot; ; sleep 1
    echo &quot;50&quot; ; sleep 1
    echo &quot;该行会被忽略&quot; ; sleep 1
    echo &quot;75&quot; ; sleep 1
    echo &quot;# 重启系统&quot; ; sleep 1
    echo &quot;100&quot; ; sleep 1
    ) |
    zenity --progress 
    --title=&quot;更新系统日志&quot; 
    --text=&quot;扫描邮件日志...&quot; 
    --percentage=0
                        
    if [ &quot;$?&quot; = -1 ] ; then
            zenity --error --text=&quot;更新被取消。&quot;
    fi
</pre>
            </section>
<br/><br/>
        <strong>7.文本输入对话框 (zenity --entry)</strong>
            <section style="margin-left:4%">
        使用 --entry 选项创建一个文本输入对话框。Zenity 将文本框的内容返回到标准输出。
<br/><br/>
        文本输入框支持以下选项：
        --text=文本:
            <section style="margin-left:4%">
        指定在文本输入框中显示的文本。
            </section>
        --entry-text=文本:
            <section style="margin-left:4%">
        指定在文本框的文本域里显示的文本。
            </section>
        --hide-text:
            <section style="margin-left:4%">
        隐藏文本框中输入的字段内容。
            </section>
        下面的脚本示范了如何创建一个文本输入对话框：
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    if zenity --entry 
    --title=&quot;添加新配置&quot; 
    --text=&quot;输入新配置的名称：&quot; 
    --entry-text &quot;新配置&quot;
    then 
        echo $?
    else
        echo &quot;未输入名称&quot;
    fi
</pre>
        array=(a b c d)表示数组，${array[@]}表示a b c d,可以显示一个带列表的entry对话框
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    array=(a b c d)
    zenity --entry ${array[@]}
</pre>
            </section>
<br/><br/>
        <strong>8.文本信息框 (zenity --text-info)</strong>
            <section style="margin-left:4%">
        使用 --text-info 选项来创建一个文本信息框(老版本只支持前两个选项)。
<br/><br/>
        文本信息框支持以下选项：
<br/><br/>
        --filename=文件名:
            <section style="margin-left:4%">
        指定一个加载到文本信息框里的文件。
            </section>
        --editable:
            <section style="margin-left:4%">
        显示的文本允许编辑，当对话框关闭后，编辑后的文本显示到显示器上。
            </section>
        --font=字体:
            <section style="margin-left:4%">
        指定文本字体。
            </section>
        --checkbox=文本:
            <section style="margin-left:4%">
        启用复选框，如“我已阅读并接受该条款。”
            </section>
        下面的脚本示范了如何创建一个文本信息对话框：
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;sh
    # You must place file &quot;COPYING&quot; in same folder of this script.
    FILE=`dirname $0`&#x2F;COPYING
    zenity --text-info 
        --title=&quot;License&quot; 
        --filename=$FILE 
        --checkbox=&quot;I read and accept the terms.&quot;
    case $? in
        0)  echo &quot;Start installation!&quot;;;
        1)  echo &quot;Stop installation!&quot;;;
        -1)  echo &quot;An unexpected error has occurred.&quot;;;
    esac
</pre>
            </section>
<br/><br/>
<br/>        </section>
    </section>
<b>在Linux中通过Shell脚本显示GUI通知</b>
    <section style="margin-left:8%;">
<br/><br/>
    <strong>Overview</strong>
        <section style="margin-left:4%">
    今天，许多Linux用户希望选择GUI桌面环境，如GNOME、XFCE或KDE作为他们的日常工作平台。然而，在Linux中，许多作业是用shell脚本完成的。通常，当我们启动一个shell脚本时，它会在Linux命令行中运行。
<br/><br/>
    我们可以从GUI桌面环境启动shell脚本。但是，如果我们想知道脚本是否完成了它的工作或检查执行状态，我们必须切换到启动脚本的终端，或检查shell脚本的进程状态和日志文件。
<br/><br/>
    在本教程中，我们将了解如何从shell脚本发送GUI通知，以便直观地看到脚本是如何运行的。
        </section>
<br/><br/>
    <strong>A Shell Script Example</strong>
        <section style="margin-left:4%">
    为了处理和演示来自shell脚本的GUI通知，我们将首先创建一个简单的shell脚本作为示例。
<br/><br/>
    假设我们想通过执行一个名为tell_me_ip.sh的shell脚本来知道我们的公共IP地址:
<br/><br/>
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;bash
    IP_MSG=&quot;$(curl --no-progress-meter http:&#x2F;&#x2F;ifconfig.io 2&gt;&amp;1)&quot;
    STATUS=$?

    if [ $STATUS -ne 0 ]; then
        MESSAGE=&quot;Error Occurred! [ $IP_MSG ]&quot;
    else
        MESSAGE=&quot;My Public IP: $IP_MSG&quot;
    fi
    echo $MESSAGE
</pre>
        </section>
<br/><br/>
    <strong>Using the zenity Utility</strong>
        <section style="margin-left:4%">
    zenity is a utility to display GTK dialog boxes in command-line and shell scripts. If we want to display Qt GUI elements, we can use qarama, a “zenity clone for Qt”.
<br/><br/>
    In this tutorial, we’ll only address how to use zenity to send GTK notifications.
<br/><br/>
    4.1. zenity in a Nutshell
        <section style="margin-left:4%">
    zenity can display desktop notifications and other types of GTK dialogs — for example, information dialogs, error alerts, calendar dialogs, checkboxes, and radio buttons.
<br/><br/>
    The syntax to use the zenity command is as simple as:
<pre style="color:indianred">
    zenity [Options]
</pre>
    这些选项定义了我们想要zenity为我们做的一切。例如，我们可以告诉它要显示哪种GUI对话框，如何安排对话框中的元素，或者如何在GUI对话框和shell脚本之间传输数据。
<br/><br/>
    毕竟，我们不想设计一个功能齐全的GTK应用程序。相反，我们的目标只是将shell脚本中生成的信息显示到GUI桌面。
<br/><br/>
    因此，我们有几个有趣的选择:
        <section style="margin-left:4%">
    –info: 
        <section style="margin-left:4%">
    display an info dialog
        </section>
    –error: 
        <section style="margin-left:4%">
    display an error dialog
        </section>
    –text=STRING: 
        <section style="margin-left:4%">
    set the dialog text
        </section>
    –notification: 
        <section style="margin-left:4%">
    display a desktop notification
        </section>
        </section>
<br/><br/>
    为了理解zenity如何工作，让我们使用zenity命令编写几个“Hello World”示例。
<br/><br/>
    首先，让我们创建一个带有“Hello World”消息的桌面通知:
<pre style="color:indianred">
    zenity --notification --window-icon=info --text &quot;Hello World&quot;
</pre>
    如果我们执行上面的命令，将显示一个通知:
<br/><br/>
    我们应该记住，当我们显示通知时，带有-text选项的文本不支持标记。
<br/><br/>
    此外，我们还可以显示信息或错误对话框来包含我们的“Hello World”消息。让我们用这个命令创建一个错误对话框:
<pre style="color:indianred">
    zenity --error --text &quot;Hello World&quot;
</pre>
    当消息在对话框中显示时，我们可以选择文本或复制它。在某些情况下，这很方便。
<br/><br/>
    然而，不像弹出通知，信息或错误对话框将阻止shell脚本。换句话说，一旦我们单击“OK”按钮，shell脚本将继续执行。
        </section>
    4.2. Displaying Dialog and Notification From Our Shell Script
        <section style="margin-left:4%">
    现在，让我们将zenity添加到tell_me_ip.sh脚本中。
<br/><br/>
    如果我们成功获得了公共IP，我们将在一个信息对话框中以消息的形式显示它。这样，我们可以很容易地复制IP地址。但如果发生错误，我们希望通过通知得到通知:
<pre style="color:indianred">
    #!&#x2F;bin&#x2F;bash 
    IP_MSG=&quot;$(curl --no-progress-meter http:&#x2F;&#x2F;ifconfig.io 2&gt;&amp;1)&quot;
    STATUS=$? 

    if [ $STATUS -ne 0 ]; then
        MESSAGE=&quot;Error Occurred! [ $IP_MSG ]&quot;
        zenity --notification --window-icon=error --text=&quot;$MESSAGE&quot;
    else
        MESSAGE=&quot;My Public IP: $IP_MSG&quot;
        zenity --info --text=&quot;$MESSAGE&quot;
    fi
    echo $MESSAGE
</pre>
    如果我们成功获得了公共IP，我们将在一个信息对话框中以消息的形式显示它。这样，我们可以很容易地复制IP地址。但如果发生错误，我们希望通过通知得到通知:
<br/><br/>
    一旦单击“OK”按钮，shell脚本将继续执行，并打印IP地址。
<br/><br/>
    如果我们将脚本中的URL更改为http:&#x2F;&#x2F;who.is.it并再次启动脚本，我们将看到一个带有详细错误消息的错误通知:
        </section>
        </section>
<br/><br/>
    <strong>5. Conclusion</strong>
        <section style="margin-left:4%">
    在本文中，我们讨论了如何将信息从shell脚本发送到GUI桌面环境。我们已经介绍了两个实用程序来完成这项工作:notify-send和zenity。
<br/><br/>
    这两个实用程序都很容易使用，我们已经通过一些简单的示例演示了这一点。然而，它们有不同的能力。而notify-send只能发送桌面通知，zenity可以做更多。
        </section>
<br/><br/>
<br/><br/>
    </section>
</section>

            </section>
            <style>
                p:first-of-type{
                    margin-bottom: 15px;
                    text-align: center;
                }
                p:first-of-type span:first-child {
                    float: left;
                }
                p:first-of-type span:last-child  {
                    float: right;
                }
            </style>
        </body>
        </html>
        